/**
 * TradingView 脚本加载测试
 * 用于验证脚本源配置和加载逻辑
 */

import { getEnvironment, getTradingViewSources } from './tradingview-loader.js'

/**
 * 测试脚本源配置
 */
export function testScriptSources() {
  console.log('=== 测试脚本源配置 ===')
  
  try {
    const env = getEnvironment()
    const sources = getTradingViewSources()
    
    console.log('环境信息:', env)
    console.log('脚本源列表:', sources)
    
    // 验证脚本源数量
    if (sources.length === 0) {
      console.error('❌ 没有可用的脚本源')
      return false
    }
    
    // 验证脚本源格式
    const invalidSources = sources.filter(source => 
      typeof source !== 'string' || source.trim() === ''
    )
    
    if (invalidSources.length > 0) {
      console.error('❌ 发现无效的脚本源:', invalidSources)
      return false
    }
    
    console.log('✅ 脚本源配置正确')
    return true
    
  } catch (error) {
    console.error('❌ 脚本源测试失败:', error)
    return false
  }
}

/**
 * 测试脚本加载逻辑
 */
export function testScriptLoading() {
  console.log('=== 测试脚本加载逻辑 ===')
  
  try {
    const sources = getTradingViewSources()
    
    // 模拟脚本加载过程
    sources.forEach((source, index) => {
      console.log(`源 ${index + 1}: ${source}`)
      
      // 检查源的类型
      if (source.startsWith('http')) {
        console.log(`  - CDN源: ${source}`)
      } else if (source.startsWith('/')) {
        console.log(`  - 绝对路径: ${source}`)
      } else if (source.startsWith('./')) {
        console.log(`  - 相对路径: ${source}`)
      } else {
        console.log(`  - 其他路径: ${source}`)
      }
    })
    
    console.log('✅ 脚本加载逻辑测试完成')
    return true
    
  } catch (error) {
    console.error('❌ 脚本加载测试失败:', error)
    return false
  }
}

/**
 * 测试不同环境下的脚本源
 */
export function testEnvironmentScriptSources() {
  console.log('=== 测试不同环境的脚本源 ===')
  
  const testEnvironments = [
    { name: 'H5环境', mockEnv: { isInAppWebView: false, isApp: false, isH5: true } },
    { name: 'APP环境', mockEnv: { isInAppWebView: false, isApp: true, isH5: false } },
    { name: 'APP WebView环境', mockEnv: { isInAppWebView: true, isApp: false, isH5: true } }
  ]
  
  testEnvironments.forEach(testEnv => {
    console.log(`\n测试 ${testEnv.name}:`)
    
    // 这里我们无法直接模拟环境，但可以验证逻辑
    const sources = getTradingViewSources()
    console.log(`  脚本源数量: ${sources.length}`)
    console.log(`  第一个源: ${sources[0]}`)
  })
  
  return true
}

/**
 * 运行完整的脚本加载测试
 */
export function runScriptLoadTests() {
  console.log('🚀 开始脚本加载测试...')
  
  try {
    // 1. 测试脚本源配置
    const sourcesTest = testScriptSources()
    
    // 2. 测试脚本加载逻辑
    const loadingTest = testScriptLoading()
    
    // 3. 测试不同环境
    const environmentTest = testEnvironmentScriptSources()
    
    console.log('\n=== 测试结果 ===')
    console.log('脚本源配置:', sourcesTest ? '✅ 通过' : '❌ 失败')
    console.log('脚本加载逻辑:', loadingTest ? '✅ 通过' : '❌ 失败')
    console.log('环境测试:', environmentTest ? '✅ 通过' : '❌ 失败')
    
    const allOk = sourcesTest && loadingTest && environmentTest
    console.log('总体结果:', allOk ? '✅ 所有测试通过' : '❌ 存在问题')
    
    return allOk
  } catch (error) {
    console.error('❌ 测试过程中出现错误:', error)
    return false
  }
}

// 如果在浏览器环境中，将测试函数挂载到window对象
if (typeof window !== 'undefined') {
  window.TradingViewScriptLoadTest = {
    testScriptSources,
    testScriptLoading,
    testEnvironmentScriptSources,
    runScriptLoadTests
  }
}
